package top.jacktgq.collection.list

/**
 @Author CandyWall
 @Date 2021/4/27--16:07
 @Description groovy中的list
 */
// java中定义list
// def list1 = new ArrayList()
// groovy中定义list
def list1 = [1, 2, 3, 4, 5]
println list1.class
println list1.size()

// groovy中定义数组
def array1 = [1, 2, 3, 4, 5] as int[]
println array1.class
println array1.size()

int[] array2 = [1, 2, 3, 4, 5]
println array2.class
println array2.size()

// list的添加元素
list1 = [1, 2, 3, 4, 5]
list1.add(6)
println list1
list1.leftShift(7)
println list1
list1 << 8
println list1
println list1 + 9

println "==============="
// list的删除元素
list1.remove(2)
println list1
list1.remove((Object) 1)
println list1
list1.removeAt(3)
println list1
list1.removeElement(8)
println list1
list1.removeAll { return it % 2 == 0 }
println list1
println list1 - [4, 5]

// 列表的排序
def list2 = [6, 3, 7, 9, 1, 4, 5, -2, -8]
Collections.sort(list2)
println list2
// 使用groovy中的封装的排序方法，简化代码
list2 = [6, 3, 7, 9, 1, 4, 5, -2, -8]
list2.sort()
println list2

// 自定义排序规则，按照绝对值大小进行排序
def list3 = [6, 3, 7, 9, 1, 4, 5, -2, -8]
Comparator mc = {a, b -> Math.abs(a) - Math.abs(b)}
Collections.sort(list3, mc)
println list3

// 使用groovy中的封装的排序方法，简化代码
list3 = [6, 3, 7, 9, 1, 4, 5, -2, -8]
list3.sort {a, b -> Math.abs(a) - Math.abs(b)}
println list3

// 对字符串list进行排序
def list4 = ["abc", "z", "hello", "groovy", "java"]
// 根据字符串的ASCII码进行排序
list4.sort()
println list4
// 根据字符串的长度进行排序
list4 = ["abc", "z", "hello", "groovy", "java"]
list4.sort {
    str1, str2 -> str1.length() - str2.length()
}
println list4
// 可以直接返回字符串的长度
list4 = ["abc", "z", "hello", "groovy", "java"]
list4.sort {
    str -> str.size()
}
println list4
// 可以使用默认参数it
list4 = ["abc", "z", "hello", "groovy", "java"]
list4.sort {
    return it.size()
}
println list4
// 可以省略return关键字
list4 = ["abc", "z", "hello", "groovy", "java"]
list4.sort {
    it.size()
}
println list4

// 列表的查找
def list5 = [6, 3, 7, 9, 1, 4, 5, -2, -8]
// 找出列表中的第一个偶数
println list5.find {
    it % 2 == 0
}
// 找出列表中的所有偶数
println list5.findAll {
    it % 2 == 0
}

// 判断列表中是否有奇数
println list5.any {
    it % 2 == 1
}

// 判断列表中是否全部都是奇数
println list5.every {
    it % 2 == 1
}

// 查找列表中的最大值和最小值
println list5.max()
println list5.min()

// 查找列表中绝对值最大和最小的元素
println list5.max {
    Math.abs(it)
}
println list5.min {
    Math.abs(it)
}

// 统计列表中偶数的个数
println list5.count {
    it % 2 == 0
}

